using System;
using System.ComponentModel;
using System.Windows.Forms;

/// <summary>
/// 自动选择第一项的ComboBox子类
/// </summary>
public class AutoSelectFirstComboBox : ComboBox
{
    private bool _autoSelectFirst = true;
    private bool _suppressSelectionEvent = false;

    /// <summary>
    /// 获取或设置是否自动选择第一项
    /// </summary>
    [Category("行为")]
    [Description("控件加载数据后是否自动选择第一项")]
    [DefaultValue(true)]
    public bool AutoSelectFirst
    {
        get => _autoSelectFirst;
        set
        {
            _autoSelectFirst = value;
            // 值变更时重新检查是否需要选择第一项
            if (value && Items.Count > 0 && SelectedIndex == -1)
            {
                SelectFirstItem();
            }
        }
    }

    public AutoSelectFirstComboBox()
    {
        // 初始化时设置默认样式（可选）
        DropDownStyle = ComboBoxStyle.DropDownList;
    }

    /// <summary>
    /// 控件创建完成时执行
    /// </summary>
    protected override void OnCreateControl()
    {
        base.OnCreateControl();
        // 控件创建后尝试选择第一项
        if (_autoSelectFirst && !DesignMode)
        {
            SelectFirstItem();
        }
    }

    /// <summary>
    /// 数据绑定完成后执行
    /// </summary>
    //protected override void OnDataBindingComplete(ListChangedEventArgs e)
    //{
    //    base.OnDataBindingComplete(e);
    //    // 数据绑定完成后尝试选择第一项
    //    if (_autoSelectFirst)
    //    {
    //        SelectFirstItem();
    //    }
    //}

    /// <summary>
    /// 项集合发生变化时执行
    /// </summary>
    //protected override void OnItemsChanged(EventArgs e)
    //{
    //    base.OnItemsChanged(e);
    //    // 项集合变化后尝试选择第一项
    //    if (_autoSelectFirst)
    //    {
    //        SelectFirstItem();
    //    }
    //}

    /// <summary>
    /// 选择第一项的具体实现
    /// </summary>
    private void SelectFirstItem()
    {
        // 确保有项且当前没有选中项
        if (Items.Count > 0 && SelectedIndex == -1 && IsHandleCreated)
        {
            try
            {
                _suppressSelectionEvent = true;
                // 选择第一项
                SelectedIndex = 0;
            }
            finally
            {
                _suppressSelectionEvent = false;
            }
        }
    }

    /// <summary>
    /// 选中项变化事件
    /// </summary>
    protected override void OnSelectedIndexChanged(EventArgs e)
    {
        // 如果是自动选择导致的事件，可选择是否抑制
        if (!_suppressSelectionEvent)
        {
            base.OnSelectedIndexChanged(e);
        }
    }
}
